import axios from "axios"
import router from "@/router/index"
import ElementUI from 'element-ui'

const service = axios.create({
  baseURL: "/api",
  withCredentials: true,//运行可带携带认证给服务器,将cookie传递给服务器
  timeout: 1000 * 10//请求不超过10秒
})

// 请求拦截器,我们原来想怎么请求都可以，但现在用了一个拦截器所以请求都要通过这个拦截器
// 向后台发请求
service.interceptors.request.use(function (config) {
  //登入请求 获取验证码请求不需要携带token
  let accessPath = ["/users/getCaptcha", "/users/login"]
  let r = accessPath.some(item => config.url === item)
  if (r) { //不需要携带token
    return config //放行
  } else {
    let token = localStorage.getItem('yf-token');
    config.headers['authorization'] = token;
    return config
  }
})
// 未登录状态的code是 10022，校验失败code是1004
// 响应拦截 后台返回的结果给他拦截了
service.interceptors.response.use(function (config) {
  // console.log(config)
  //如果是响应验证码就不需要拦截
  //如果响应的状态是10022或者1004 那么需要跳转到登入页
  let regExp = /^\/users\/verifyCaptcha.+/
  let { url } = config.config
  if (url === "/users/getCaptcha" || regExp.test(url) || url === "/login") {
    return config
  } else {//其它请求响应
    if (config.data.code === "10022" || config.data.code === "1004") {
      //如果响应的状态是10022或者1004 那么需要跳转到登入页
      ElementUI.Message.error("登入过期,请重新登入")
      router.push("/login");
      localStorage.removeItem('yf-token')
    } else {
      return config
    }

  }

})
// console.log(ElementUI);
export default service
